//+build !noasm !appengine arm64

TEXT ·_cosine_distance_f32_neon(SB), $0-32
MOVD input1+0(FP),  R0
MOVD input2+8(FP), R1
MOVD size+16(FP), R2
MOVD output+24(FP),R3
WORD 	$0xd342fc48	//	LSR $2, R2, R8
WORD 	$0x7100051f	//	CMPW $1, R8
WORD 	$0x5400024b	//	BLT 18(PC)
WORD 	$0xb27e7fe9	//	MOVD $17179869180, R9
WORD 	$0x8b090049	//	ADD R9, R2, R9
WORD 	$0x927e7d29	//	AND $17179869180, R9, R9
WORD 	$0x6f00e400	//	VMOVI $0, V0.D2
WORD 	$0xaa0103ea	//	MOVD R1, R10
WORD 	$0xaa0003eb	//	MOVD R0, R11
WORD 	$0x6f00e402	//	VMOVI $0, V2.D2
WORD 	$0x6f00e401	//	VMOVI $0, V1.D2
WORD 	$0x3cc10563	//	FMOVQ.P 16(R11), F3
WORD 	$0x3cc10544	//	FMOVQ.P 16(R10), F4
WORD 	$0x4e23cc80	//	VFMLA V3.S4, V4.S4, V0.S4
WORD 	$0x4e23cc62	//	VFMLA V3.S4, V3.S4, V2.S4
WORD 	$0x4e24cc81	//	VFMLA V4.S4, V4.S4, V1.S4
WORD 	$0x71000508	//	SUBSW $1, R8, R8
WORD 	$0x54ffff41	//	BNE -6(PC)
WORD 	$0x9100112b	//	ADD $4, R9, R11
WORD 	$0x14000005	//	JMP 5(PC)
WORD 	$0xd280000b	//	MOVD $0, R11
WORD 	$0x6f00e401	//	VMOVI $0, V1.D2
WORD 	$0x6f00e402	//	VMOVI $0, V2.D2
WORD 	$0x6f00e400	//	VMOVI $0, V0.D2
WORD 	$0x6e20d400	//	VFADDP V0.S4, V0.S4, V0.S4
WORD 	$0x7e30d800	//	FADDP V0.S2, F0
WORD 	$0x6e22d442	//	VFADDP V2.S4, V2.S4, V2.S4
WORD 	$0x7e30d843	//	FADDP V2.S2, F3
WORD 	$0x6e21d421	//	VFADDP V1.S4, V1.S4, V1.S4
WORD 	$0x7e30d824	//	FADDP V1.S2, F4
WORD 	$0xeb02017f	//	CMP R2, R11
WORD 	$0x54000942	//	BCS 74(PC)
WORD 	$0xcb0b0049	//	SUB R11, R2, R9
WORD 	$0xf100413f	//	CMP $16, R9
WORD 	$0x54000062	//	BCS 3(PC)
WORD 	$0xaa0b03e8	//	MOVD R11, R8
WORD 	$0x1400003a	//	JMP 58(PC)
WORD 	$0x927ced2a	//	AND $-16, R9, R10
WORD 	$0x8b0a0168	//	ADD R10, R11, R8
WORD 	$0x6f00e401	//	VMOVI $0, V1.D2
WORD 	$0x6f00e402	//	VMOVI $0, V2.D2
WORD 	$0x6e040482	//	VMOV V4.S[0], V2.S[0]
WORD 	$0x6f00e404	//	VMOVI $0, V4.D2
WORD 	$0x6e040464	//	VMOV V3.S[0], V4.S[0]
WORD 	$0x6f00e403	//	VMOVI $0, V3.D2
WORD 	$0x6e040403	//	VMOV V0.S[0], V3.S[0]
WORD 	$0xd37ef56b	//	LSL $2, R11, R11
WORD 	$0x9100816c	//	ADD $32, R11, R12
WORD 	$0x6f00e405	//	VMOVI $0, V5.D2
WORD 	$0x8b0c002b	//	ADD R12, R1, R11
WORD 	$0x6f00e406	//	VMOVI $0, V6.D2
WORD 	$0x8b0c000c	//	ADD R12, R0, R12
WORD 	$0xaa0a03ed	//	MOVD R10, R13
WORD 	$0x6f00e407	//	VMOVI $0, V7.D2
WORD 	$0x6f00e410	//	VMOVI $0, V16.D2
WORD 	$0x6f00e411	//	VMOVI $0, V17.D2
WORD 	$0x6f00e400	//	VMOVI $0, V0.D2
WORD 	$0x6f00e412	//	VMOVI $0, V18.D2
WORD 	$0x6f00e413	//	VMOVI $0, V19.D2
WORD 	$0xad7f5594	//	FLDPQ -32(R12), (F20, F21)
WORD 	$0xacc25d96	//	FLDPQ.P 64(R12), (F22, F23)
WORD 	$0xad7f6578	//	FLDPQ -32(R11), (F24, F25)
WORD 	$0xacc26d7a	//	FLDPQ.P 64(R11), (F26, F27)
WORD 	$0x4e34cf03	//	VFMLA V20.S4, V24.S4, V3.S4
WORD 	$0x4e35cf20	//	VFMLA V21.S4, V25.S4, V0.S4
WORD 	$0x4e36cf52	//	VFMLA V22.S4, V26.S4, V18.S4
WORD 	$0x4e37cf73	//	VFMLA V23.S4, V27.S4, V19.S4
WORD 	$0x4e34ce84	//	VFMLA V20.S4, V20.S4, V4.S4
WORD 	$0x4e35cea7	//	VFMLA V21.S4, V21.S4, V7.S4
WORD 	$0x4e36ced0	//	VFMLA V22.S4, V22.S4, V16.S4
WORD 	$0x4e37cef1	//	VFMLA V23.S4, V23.S4, V17.S4
WORD 	$0x4e38cf02	//	VFMLA V24.S4, V24.S4, V2.S4
WORD 	$0x4e39cf21	//	VFMLA V25.S4, V25.S4, V1.S4
WORD 	$0x4e3acf45	//	VFMLA V26.S4, V26.S4, V5.S4
WORD 	$0x4e3bcf66	//	VFMLA V27.S4, V27.S4, V6.S4
WORD 	$0xf10041ad	//	SUBS $16, R13, R13
WORD 	$0x54fffde1	//	BNE -17(PC)
WORD 	$0x4e23d400	//	FADD V3.S4, V0.S4, V0.S4
WORD 	$0x4e20d640	//	FADD V0.S4, V18.S4, V0.S4
WORD 	$0x4e20d660	//	FADD V0.S4, V19.S4, V0.S4
WORD 	$0x6e20d400	//	VFADDP V0.S4, V0.S4, V0.S4
WORD 	$0x7e30d800	//	FADDP V0.S2, F0
WORD 	$0x4e24d4e3	//	FADD V4.S4, V7.S4, V3.S4
WORD 	$0x4e23d603	//	FADD V3.S4, V16.S4, V3.S4
WORD 	$0x4e23d623	//	FADD V3.S4, V17.S4, V3.S4
WORD 	$0x6e23d463	//	VFADDP V3.S4, V3.S4, V3.S4
WORD 	$0x7e30d863	//	FADDP V3.S2, F3
WORD 	$0x4e22d421	//	FADD V2.S4, V1.S4, V1.S4
WORD 	$0x4e21d4a1	//	FADD V1.S4, V5.S4, V1.S4
WORD 	$0x4e21d4c1	//	FADD V1.S4, V6.S4, V1.S4
WORD 	$0x6e21d421	//	VFADDP V1.S4, V1.S4, V1.S4
WORD 	$0x7e30d824	//	FADDP V1.S2, F4
WORD 	$0xeb0a013f	//	CMP R10, R9
WORD 	$0x54000180	//	BEQ 12(PC)
WORD 	$0xcb080049	//	SUB R8, R2, R9
WORD 	$0xd37ef50a	//	LSL $2, R8, R10
WORD 	$0x8b0a0028	//	ADD R10, R1, R8
WORD 	$0x8b0a000a	//	ADD R10, R0, R10
WORD 	$0xbc404541	//	FMOVS.P 4(R10), F1
WORD 	$0xbc404502	//	FMOVS.P 4(R8), F2
WORD 	$0x1f010040	//	FMADDS F1, F0, F2, F0
WORD 	$0x1f010c23	//	FMADDS F1, F3, F1, F3
WORD 	$0x1f021044	//	FMADDS F2, F4, F2, F4
WORD 	$0xf1000529	//	SUBS $1, R9, R9
WORD 	$0x54ffff41	//	BNE -6(PC)
WORD 	$0x1e2e1001	//	FMOVS $1., F1
WORD 	$0x1e202008	//	FCMPS $(0.0), F0
WORD 	$0x54000160	//	BEQ 11(PC)
WORD 	$0x1e21c062	//	FSQRTS F3, F2
WORD 	$0x1e202048	//	FCMPS $(0.0), F2
WORD 	$0x54000100	//	BEQ 8(PC)
WORD 	$0x1e21c083	//	FSQRTS F4, F3
WORD 	$0x1e202068	//	FCMPS $(0.0), F3
WORD 	$0x540000a0	//	BEQ 5(PC)
WORD 	$0x1e220861	//	FMULS F2, F3, F1
WORD 	$0x1e211800	//	FDIVS F1, F0, F0
WORD 	$0x1e2e1001	//	FMOVS $1., F1
WORD 	$0x1e203821	//	FSUBS F0, F1, F1
WORD 	$0xbd000061	//	FMOVS F1, (R3)
WORD 	$0xd65f03c0	//	RET

TEXT ·_cosine_distance_with_magnitude_f32_neon(SB), $0-32
MOVD input1+0(FP),  R0
MOVD input2+8(FP), R1
MOVD magnitudes+16(FP), R2
MOVD size+24(FP), R3
MOVD output+32(FP),R4
WORD 	$0xd342fc68	//	LSR $2, R3, R8
WORD 	$0x7100051f	//	CMPW $1, R8
WORD 	$0x5400024b	//	BLT 18(PC)
WORD 	$0xb27e7fe9	//	MOVD $17179869180, R9
WORD 	$0x8b090069	//	ADD R9, R3, R9
WORD 	$0x927e7d29	//	AND $17179869180, R9, R9
WORD 	$0x6f00e400	//	VMOVI $0, V0.D2
WORD 	$0xaa0103ea	//	MOVD R1, R10
WORD 	$0xaa0003eb	//	MOVD R0, R11
WORD 	$0x3cc10561	//	FMOVQ.P 16(R11), F1
WORD 	$0x3cc10542	//	FMOVQ.P 16(R10), F2
WORD 	$0x4e21cc40	//	VFMLA V1.S4, V2.S4, V0.S4
WORD 	$0x71000508	//	SUBSW $1, R8, R8
WORD 	$0x54ffff81	//	BNE -4(PC)
WORD 	$0x9100112b	//	ADD $4, R9, R11
WORD 	$0x6e20d400	//	VFADDP V0.S4, V0.S4, V0.S4
WORD 	$0x7e30d800	//	FADDP V0.S2, F0
WORD 	$0xeb03017f	//	CMP R3, R11
WORD 	$0x54000103	//	BCC 8(PC)
WORD 	$0x14000032	//	JMP 50(PC)
WORD 	$0xd280000b	//	MOVD $0, R11
WORD 	$0x6f00e400	//	VMOVI $0, V0.D2
WORD 	$0x6e20d400	//	VFADDP V0.S4, V0.S4, V0.S4
WORD 	$0x7e30d800	//	FADDP V0.S2, F0
WORD 	$0xeb03017f	//	CMP R3, R11
WORD 	$0x54000582	//	BCS 44(PC)
WORD 	$0xcb0b0069	//	SUB R11, R3, R9
WORD 	$0xf100413f	//	CMP $16, R9
WORD 	$0x54000062	//	BCS 3(PC)
WORD 	$0xaa0b03e8	//	MOVD R11, R8
WORD 	$0x1400001e	//	JMP 30(PC)
WORD 	$0x927ced2a	//	AND $-16, R9, R10
WORD 	$0x8b0a0168	//	ADD R10, R11, R8
WORD 	$0x6f00e401	//	VMOVI $0, V1.D2
WORD 	$0x6f00e402	//	VMOVI $0, V2.D2
WORD 	$0x6e040402	//	VMOV V0.S[0], V2.S[0]
WORD 	$0xd37ef56b	//	LSL $2, R11, R11
WORD 	$0x9100816c	//	ADD $32, R11, R12
WORD 	$0x8b0c002b	//	ADD R12, R1, R11
WORD 	$0x8b0c000c	//	ADD R12, R0, R12
WORD 	$0xaa0a03ed	//	MOVD R10, R13
WORD 	$0x6f00e400	//	VMOVI $0, V0.D2
WORD 	$0x6f00e403	//	VMOVI $0, V3.D2
WORD 	$0xad7f1584	//	FLDPQ -32(R12), (F4, F5)
WORD 	$0xacc21d86	//	FLDPQ.P 64(R12), (F6, F7)
WORD 	$0xad7f4570	//	FLDPQ -32(R11), (F16, F17)
WORD 	$0xacc24d72	//	FLDPQ.P 64(R11), (F18, F19)
WORD 	$0x4e24ce02	//	VFMLA V4.S4, V16.S4, V2.S4
WORD 	$0x4e25ce21	//	VFMLA V5.S4, V17.S4, V1.S4
WORD 	$0x4e26ce40	//	VFMLA V6.S4, V18.S4, V0.S4
WORD 	$0x4e27ce63	//	VFMLA V7.S4, V19.S4, V3.S4
WORD 	$0xf10041ad	//	SUBS $16, R13, R13
WORD 	$0x54fffee1	//	BNE -9(PC)
WORD 	$0x4e22d421	//	FADD V2.S4, V1.S4, V1.S4
WORD 	$0x4e21d400	//	FADD V1.S4, V0.S4, V0.S4
WORD 	$0x4e20d460	//	FADD V0.S4, V3.S4, V0.S4
WORD 	$0x6e20d400	//	VFADDP V0.S4, V0.S4, V0.S4
WORD 	$0x7e30d800	//	FADDP V0.S2, F0
WORD 	$0xeb0a013f	//	CMP R10, R9
WORD 	$0x54000140	//	BEQ 10(PC)
WORD 	$0xcb080069	//	SUB R8, R3, R9
WORD 	$0xd37ef50a	//	LSL $2, R8, R10
WORD 	$0x8b0a0028	//	ADD R10, R1, R8
WORD 	$0x8b0a000a	//	ADD R10, R0, R10
WORD 	$0xbc404541	//	FMOVS.P 4(R10), F1
WORD 	$0xbc404502	//	FMOVS.P 4(R8), F2
WORD 	$0x1f010040	//	FMADDS F1, F0, F2, F0
WORD 	$0xf1000529	//	SUBS $1, R9, R9
WORD 	$0x54ffff81	//	BNE -4(PC)
WORD 	$0x1e2e1001	//	FMOVS $1., F1
WORD 	$0x1e202008	//	FCMPS $(0.0), F0
WORD 	$0x54000160	//	BEQ 11(PC)
WORD 	$0xbd400042	//	FMOVS (R2), F2
WORD 	$0x1e202048	//	FCMPS $(0.0), F2
WORD 	$0x54000100	//	BEQ 8(PC)
WORD 	$0xbd400443	//	FMOVS 4(R2), F3
WORD 	$0x1e202068	//	FCMPS $(0.0), F3
WORD 	$0x540000a0	//	BEQ 5(PC)
WORD 	$0x1e220861	//	FMULS F2, F3, F1
WORD 	$0x1e211800	//	FDIVS F1, F0, F0
WORD 	$0x1e2e1001	//	FMOVS $1., F1
WORD 	$0x1e203821	//	FSUBS F0, F1, F1
WORD 	$0xbd000081	//	FMOVS F1, (R4)
WORD 	$0xd65f03c0	//	RET


TEXT ·_cosine_distance_f32_sve(SB), $0-32
MOVD input1+0(FP),  R0
MOVD input2+8(FP), R1
MOVD size+16(FP), R2
MOVD output+24(FP),R3
WORD 	$0x04a0e3e8	//	?
WORD 	$0x9ac8084a	//	UDIV R8, R2, R10
WORD 	$0x7100055f	//	CMPW $1, R10
WORD 	$0x540002eb	//	BLT 23(PC)
WORD 	$0xd2800009	//	MOVD $0, R9
WORD 	$0x5280000b	//	MOVW $0, R11
WORD 	$0x25b8c000	//	?
WORD 	$0x04603002	//	?
WORD 	$0x04603001	//	?
WORD 	$0x25a21d20	//	?
WORD 	$0xa5494003	//	?
WORD 	$0xa5494024	//	?
WORD 	$0x65a40060	//	?
WORD 	$0x65a30062	//	?
WORD 	$0x65a40081	//	?
WORD 	$0x8b080129	//	ADD R8, R9, R9
WORD 	$0x1100056b	//	ADDW $1, R11, R11
WORD 	$0x6b0a017f	//	CMPW R10, R11
WORD 	$0x54fffee1	//	BNE -9(PC)
WORD 	$0x2598e3e0	//	?
WORD 	$0x65802042	//	?
WORD 	$0x65802021	//	?
WORD 	$0x65802000	//	?
WORD 	$0xeb02013f	//	CMP R2, R9
WORD 	$0x54000183	//	BCC 12(PC)
WORD 	$0x14000045	//	JMP 69(PC)
WORD 	$0xd2800009	//	MOVD $0, R9
WORD 	$0x25b8c001	//	?
WORD 	$0x04613022	//	?
WORD 	$0x04613020	//	?
WORD 	$0x2598e3e0	//	?
WORD 	$0x65802042	//	?
WORD 	$0x65802021	//	?
WORD 	$0x65802000	//	?
WORD 	$0xeb02013f	//	CMP R2, R9
WORD 	$0x54000762	//	BCS 59(PC)
WORD 	$0xcb090048	//	SUB R9, R2, R8
WORD 	$0x0460e3eb	//	?
WORD 	$0xeb0b011f	//	CMP R11, R8
WORD 	$0x54000062	//	BCS 3(PC)
WORD 	$0xaa0903e8	//	MOVD R9, R8
WORD 	$0x1400002a	//	JMP 42(PC)
WORD 	$0xd280000c	//	MOVD $0, R12
WORD 	$0x9acb090a	//	UDIV R11, R8, R10
WORD 	$0x9b0b7d4d	//	MUL R11, R10, R13
WORD 	$0xcb0d010a	//	SUB R13, R8, R10
WORD 	$0x8b0d0128	//	ADD R13, R9, R8
WORD 	$0x25b8c003	//	?
WORD 	$0x2598e021	//	?
WORD 	$0x05a3c442	//	?
WORD 	$0x05a3c421	//	?
WORD 	$0x05a3c400	//	?
WORD 	$0x04bf502e	//	?
WORD 	$0xd344fdce	//	LSR $4, R14, R14
WORD 	$0xd37ef52f	//	LSL $2, R9, R15
WORD 	$0x8b0f0009	//	ADD R15, R0, R9
WORD 	$0x92407dce	//	AND $4294967295, R14, R14
WORD 	$0xd37cedd0	//	LSL $4, R14, R16
WORD 	$0x8b10012e	//	ADD R16, R9, R14
WORD 	$0x8b0f002f	//	ADD R15, R1, R15
WORD 	$0x8b1001f0	//	ADD R16, R15, R16
WORD 	$0x04633064	//	?
WORD 	$0x04633065	//	?
WORD 	$0xa54c4126	//	?
WORD 	$0xa54c41c7	//	?
WORD 	$0xa54c41f0	//	?
WORD 	$0xa54c4211	//	?
WORD 	$0x65a60200	//	?
WORD 	$0x65a70225	//	?
WORD 	$0x65a600c2	//	?
WORD 	$0x65a700e3	//	?
WORD 	$0x65b00201	//	?
WORD 	$0x65b10224	//	?
WORD 	$0x8b0b018c	//	ADD R11, R12, R12
WORD 	$0xeb0d019f	//	CMP R13, R12
WORD 	$0x54fffe81	//	BNE -12(PC)
WORD 	$0x658000a0	//	?
WORD 	$0x65802000	//	?
WORD 	$0x65810081	//	?
WORD 	$0x65802021	//	?
WORD 	$0x65820062	//	?
WORD 	$0x65802042	//	?
WORD 	$0xb400018a	//	CBZ R10, 12(PC)
WORD 	$0xcb080049	//	SUB R8, R2, R9
WORD 	$0xd37ef50a	//	LSL $2, R8, R10
WORD 	$0x8b0a0028	//	ADD R10, R1, R8
WORD 	$0x8b0a000a	//	ADD R10, R0, R10
WORD 	$0xbc404543	//	FMOVS.P 4(R10), F3
WORD 	$0xbc404504	//	FMOVS.P 4(R8), F4
WORD 	$0x1f030080	//	FMADDS F3, F0, F4, F0
WORD 	$0x1f030862	//	FMADDS F3, F2, F3, F2
WORD 	$0x1f040481	//	FMADDS F4, F1, F4, F1
WORD 	$0xf1000529	//	SUBS $1, R9, R9
WORD 	$0x54ffff41	//	BNE -6(PC)
WORD 	$0x1e2e1003	//	FMOVS $1., F3
WORD 	$0x1e202008	//	FCMPS $(0.0), F0
WORD 	$0x54000160	//	BEQ 11(PC)
WORD 	$0x1e21c042	//	FSQRTS F2, F2
WORD 	$0x1e202048	//	FCMPS $(0.0), F2
WORD 	$0x54000100	//	BEQ 8(PC)
WORD 	$0x1e21c021	//	FSQRTS F1, F1
WORD 	$0x1e202028	//	FCMPS $(0.0), F1
WORD 	$0x540000a0	//	BEQ 5(PC)
WORD 	$0x1e210841	//	FMULS F1, F2, F1
WORD 	$0x1e211800	//	FDIVS F1, F0, F0
WORD 	$0x1e2e1001	//	FMOVS $1., F1
WORD 	$0x1e203823	//	FSUBS F0, F1, F3
WORD 	$0xbd000063	//	FMOVS F3, (R3)
WORD 	$0xd65f03c0	//	RET



TEXT ·_cosine_distance_with_magnitude_f32_sve(SB), $0-32
MOVD input1+0(FP),  R0
MOVD input2+8(FP), R1
MOVD size+16(FP), R2
MOVD output+24(FP),R3
WORD 	$0x04a0e3e9	//	?
WORD 	$0x9ac9086a	//	UDIV R9, R3, R10
WORD 	$0x7100055f	//	CMPW $1, R10
WORD 	$0x5400022b	//	BLT 17(PC)
WORD 	$0xd2800008	//	MOVD $0, R8
WORD 	$0x5280000b	//	MOVW $0, R11
WORD 	$0x25b8c000	//	?
WORD 	$0x25a31d00	//	?
WORD 	$0xa5484001	//	?
WORD 	$0xa5484022	//	?
WORD 	$0x65a20020	//	?
WORD 	$0x8b090108	//	ADD R9, R8, R8
WORD 	$0x1100056b	//	ADDW $1, R11, R11
WORD 	$0x6b0a017f	//	CMPW R10, R11
WORD 	$0x54ffff21	//	BNE -7(PC)
WORD 	$0x2598e3e0	//	?
WORD 	$0x65802000	//	?
WORD 	$0xeb03011f	//	CMP R3, R8
WORD 	$0x54000103	//	BCC 8(PC)
WORD 	$0x14000033	//	JMP 51(PC)
WORD 	$0xd2800008	//	MOVD $0, R8
WORD 	$0x25b8c000	//	?
WORD 	$0x2598e3e0	//	?
WORD 	$0x65802000	//	?
WORD 	$0xeb03011f	//	CMP R3, R8
WORD 	$0x540005a2	//	BCS 45(PC)
WORD 	$0xcb080069	//	SUB R8, R3, R9
WORD 	$0x0460e3eb	//	?
WORD 	$0xeb0b013f	//	CMP R11, R9
WORD 	$0x54000062	//	BCS 3(PC)
WORD 	$0xaa0803e9	//	MOVD R8, R9
WORD 	$0x1400001e	//	JMP 30(PC)
WORD 	$0xd280000c	//	MOVD $0, R12
WORD 	$0x9acb092a	//	UDIV R11, R9, R10
WORD 	$0x9b0b7d4d	//	MUL R11, R10, R13
WORD 	$0xcb0d012a	//	SUB R13, R9, R10
WORD 	$0x8b0d0109	//	ADD R13, R8, R9
WORD 	$0x25b8c001	//	?
WORD 	$0x2598e021	//	?
WORD 	$0x05a1c400	//	?
WORD 	$0x04bf502e	//	?
WORD 	$0xd344fdce	//	LSR $4, R14, R14
WORD 	$0xd37ef50f	//	LSL $2, R8, R15
WORD 	$0x8b0f0008	//	ADD R15, R0, R8
WORD 	$0x92407dce	//	AND $4294967295, R14, R14
WORD 	$0xd37cedd0	//	LSL $4, R14, R16
WORD 	$0x8b10010e	//	ADD R16, R8, R14
WORD 	$0x8b0f002f	//	ADD R15, R1, R15
WORD 	$0x8b1001f0	//	ADD R16, R15, R16
WORD 	$0xa54c4102	//	?
WORD 	$0xa54c41c3	//	?
WORD 	$0xa54c41e4	//	?
WORD 	$0xa54c4205	//	?
WORD 	$0x65a20080	//	?
WORD 	$0x65a300a1	//	?
WORD 	$0x8b0b018c	//	ADD R11, R12, R12
WORD 	$0xeb0d019f	//	CMP R13, R12
WORD 	$0x54ffff01	//	BNE -8(PC)
WORD 	$0x65800020	//	?
WORD 	$0x65802000	//	?
WORD 	$0xb400014a	//	CBZ R10, 10(PC)
WORD 	$0xcb090068	//	SUB R9, R3, R8
WORD 	$0xd37ef52a	//	LSL $2, R9, R10
WORD 	$0x8b0a0029	//	ADD R10, R1, R9
WORD 	$0x8b0a000a	//	ADD R10, R0, R10
WORD 	$0xbc404541	//	FMOVS.P 4(R10), F1
WORD 	$0xbc404522	//	FMOVS.P 4(R9), F2
WORD 	$0x1f010040	//	FMADDS F1, F0, F2, F0
WORD 	$0xf1000508	//	SUBS $1, R8, R8
WORD 	$0x54ffff81	//	BNE -4(PC)
WORD 	$0x1e2e1001	//	FMOVS $1., F1
WORD 	$0x1e202008	//	FCMPS $(0.0), F0
WORD 	$0x54000160	//	BEQ 11(PC)
WORD 	$0xbd400042	//	FMOVS (R2), F2
WORD 	$0x1e202048	//	FCMPS $(0.0), F2
WORD 	$0x54000100	//	BEQ 8(PC)
WORD 	$0xbd400443	//	FMOVS 4(R2), F3
WORD 	$0x1e202068	//	FCMPS $(0.0), F3
WORD 	$0x540000a0	//	BEQ 5(PC)
WORD 	$0x1e220861	//	FMULS F2, F3, F1
WORD 	$0x1e211800	//	FDIVS F1, F0, F0
WORD 	$0x1e2e1001	//	FMOVS $1., F1
WORD 	$0x1e203821	//	FSUBS F0, F1, F1
WORD 	$0xbd000081	//	FMOVS F1, (R4)
WORD 	$0xd65f03c0	//	RET
